package customStruct

import (
	"time"
)

// config环境相关信息
// ——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
type ConfigENV struct {
	EnvName string `yaml:"envName"`
}

// config配置相关结构体
// ——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
type Config struct {
	SettingApi      SettingApi   `yaml:"settingApi"`      // api配置
	SettingSql      SettingSql   `yaml:"settingSql"`      // sql配置
	SettingRedis    SettingRedis `yaml:"settingRedis"`    // redis配置
	SettingLog      SettingLog   `yaml:"settingLog"`      // 日志配置
	SettingJwt      SettingJwt   `yaml:"settingJwt"`      // jwt配置
	PEKEY           string       `yaml:"PEKEY"`           // 前端Argon2加密key
	SettingPEArgon2 Argon2Format `yaml:"settingPEArgon2"` // argon2前端配置
	SettingBGArgon2 Argon2Format `yaml:"settingBGArgon2"` // argon2后台配置
}

// api配置公共配置
// ——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
type SettingApi struct {
	Path string `yaml:"path"` // 服务器地址 默认使用
	Port string `yaml:"port"` // 服务器端口
}

// sql公共配置
// ——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
type SettingSql struct {
	Type         string `yaml:"type"`         // 数据库类型
	User         string `yaml:"user"`         // sql用户名
	Password     string `yaml:"password"`     // sql密码
	Address      string `yaml:"address"`      // sql地址
	Port         string `yaml:"port"`         // sql端口
	Database     string `yaml:"database"`     // sql库名
	Charset      string `yaml:"charset"`      // sql编码
	MaxOpenConns int    `yaml:"maxOpenConns"` // sql最大连接数
	MaxIdleConns int    `yaml:"maxIdleConns"` // sql最大空闲连接数
	Timeout      int    `yaml:"timeout"`      // sql每个链接的最大生命周期
}

// redis公共配置
// ——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
type SettingRedis struct {
	Path                   string        `yaml:"path"`                   // redis地址 默认使用
	Port                   string        `yaml:"port"`                   // redis端口
	Password               string        `yaml:"password"`               // redis密码
	DB                     int           `yaml:"db"`                     // redis数据库编号
	RefreshTokenKeyTimeout time.Duration `yaml:"refreshTokenKeyTimeout"` // refreshToken 过期时间 单位：秒
}

// 日志配置
// ——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
type SettingLog struct {
	LogFolder  string `yaml:"logFolder"`  // 保存日志的文件夹名
	Filename   string `yaml:"filename"`   // 保存日志路径
	MaxSize    int    `yaml:"maxsize"`    // 进行切割之前,日志文件的最大大小(MB为单位)
	MaxAge     int    `yaml:"maxAge"`     // 保留旧文件的最大天数
	MaxBackups int    `yaml:"maxBackups"` // 保留旧文件的最大个数
	Compress   bool   `yaml:"compress"`   // 是否压缩
	Stack      bool   `yaml:"stack"`      // 是否对错误日志堆栈
	Format     string `yaml:"format"`     // 日志格式，支持json / console
}

// jwt公共配置
// ——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
type SettingJwt struct {
	AccessTokenKey     string        `yaml:"accessTokenKey"`     // 用户token密匙
	AccessTokenTimeout time.Duration `yaml:"accessTokenTimeout"` // 用户token 过期时间 单位：秒
}
